系统: Ubuntu 22.04
今天登录学校的服务器时,使用我之前 [配置的 zsh](./配置 zsh.md) 突然报错。
/etc/zsh/zshrc:112: compinit: function definition file not found由于我是用 oh-my-zsh 增强的 zsh,后面还跟了一串 omz 的报错。
起先尝试了重新更新 omz、删除zcompdump缓存等等跟发现都没用。
最后在 这里 找到了原因,原来是 lmod 同时支持 zsh 和 ksh,在有些用户使用 ksh 时,修改了FPATH环境变量,这导致我在使用 zsh时 FPATH 里找不到诸如 compinit 的函数路径。
经过尝试,在从 bash 进入 zsh 之前需要 unset FPATH,同时添加以下命令到 ~/.zshrc 的头部
sh
#.zshrc
if [ -f /projects/share/apps/lmod/lmod/init/zsh ]; then
source /projects/share/apps/lmod/lmod/init/zsh
fi之所以要在 bash 里 unset FPATH 是因为一旦登录 zsh 它就会继承 bash内的 FPATH,而在 .zshrc加入上述命令中则是希望在登录 zsh 后就为zsh初始化正确的 FPATH 以找到相应的函数。
最后为了方便,我在 ~/.bashrc 中加入了以下 alias:
sh
alias zsh="unset FPATH; exec zsh"这样以后就不用反复输入 unset FPATH 了。
问题得到圆满解决,可惜为了排除故障原因,我把之前的 zsh 缓存全都清空了,现在没有之前运行命令的历史记录了呜呜呜。